﻿//#include <iostream>
//using namespace std;
//class Date
//{
//
//public:
//	Date(int year = 2023, int month = 10, int day = 30)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//
//private:
//	int _year;
//	int _month;
//	int _day;
//
//};

//class Date
//{
//
//public:
//	Date(int year = 2023, int month = 10, int day = 30)
//		:_year(year)
//		,_month(month)
//		,_day(day)
//	{}
//
//private:
//	int _year;
//	int _month;
//	int _day;
//
//};

//class A
//{
//
//public:
//	A(int num = 0)
//		:_a(num)
//	{}
//
//	A(const A& _A)
//	{
//		_a = _A._a;
//		_b = _A._b;
//	}
//
//	int Getnum_a()
//	{
//		return _a;
//	}
//
//private:
//	int _a;
//	int _b;
//};
//
//int main()
//{
//
//	//会先去调用默认构造函数，然后在构造之前走初始化列表
//	//将a._a初始化为0
//	A a;
//	cout << a.Getnum_a() << endl;
//
//	//C++支持单个参数的构造函数这样使用
//	//先将int类型强转为A类型的临时对象，用2去传参，该临时对象
//	//再进行与对象b的拷贝构造
//	A b = 2;
//	cout << b.Getnum_a() << endl;
//
//	return 0;
//}

//class A
//{
//
//public:
//
//	//初始化列表
//	A(int a = 0)
//		:_a(a)
//	{}
//
//private:
//	int _a;
//	int _b;
//
//};
//
//class B
//{
//
//public:
//
//	//初始化列表
//	B(int& a,int b,A& c)
//		:_a(a)
//		,_b(b)
//		,_c(c)
//	{}
//
//private:
//
//	//这三个类型的变量都需要初始化，因为他们都只能定义一次，
//	//不能再做修改。
//	int& _a;
//	const int _b;
//	A _c;
//
//};
//
//int main()
//{
//
//	int a = 6;
//	int b = 3;
//	A c;
//
//	B _b(a,b,c);
//
//	int& d = a;
//
//	const int f = 10;
//	//f = 20;
//
//	return 0;
//}

//class A
//{
//
//public:
//	A(int a)
//		:_a2(a)
//		,_a1(_a2)
//	{}
//
//	void print()
//	{
//		cout << _a1 << " " << _a2 << endl;
//	}
//
//private:
//	int _a1;
//	int _a2;
//
//};
//
//int main()
//{
//
//	A a(1);
//	a.print();
//
//
//	return 0;
//}

//class Date
//{
//
//public:
//	Date(int year)
//		:_year(year)
//	{}
//
//	Date(int year, int month, int day)
//		:_year(year)
//		,_month(month)
//		,_day(day)
//	{}
//
//	void print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//
//	void print() const
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//
//private:
//	int _year;
//	int _month;
//	int _day;
//
//};
//
//int main()
//{
//
//	Date date1 = 2023;
//	date1.print();
//
//	Date date2 = { 2023,10,30 };
//	date2.print();
//	
//	const Date date3 = { 2023,10,31 };
//	date3.print();
//
//	return 0;
//}

//class Date
//{
//
//public:
//	explicit Date(int year)
//		:_year(year)
//	{}
//
//	explicit Date(int year, int month, int day)
//		:_year(year)
//		, _month(month)
//		, _day(day)
//	{}
//
//	void print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//
//	void print() const
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//
//private:
//	int _year;
//	int _month;
//	int _day;
//
//};
//
//int main()
//{
//
//	Date date1 = 2023;
//	date1.print();
//
//	Date date2 = { 2023,10,30 };
//	date2.print();
//
//	const Date date3 = { 2023,10,31 };
//	date3.print();
//
//	return 0;
//}

//#include <iostream>
//using namespace std;

//int count1 = 0;
//
//class A
//{
//public :
//	A()
//		:_a(1)
//		,_b(2)
//	{
//		count1++;
//	}
//
//	void print()
//	{
//		cout << _a << " " << _b << endl;
// 	}
//
//private:
//	int _a;
//	int _b;
//
//};
//
//void func(A a)
//{
//	//...
//}
//
//int main()
//{
//
//	A a;
//	func(a);
//
//	return 0;
//}

//class A
//{
//public:
//	A()
//		:_a(1)
//		, _b(2)
//	{
//		count++;
//	}
//
//	void print()
//	{
//		cout << _a << " " << _b << endl;
//	}
//
//private:
//	int _a;
//	int _b;
//	int count;
//
//};
//
//void func(A a)
//{
//	//...
//}
//
//int main()
//{
//
//	A a;
//	func(a);
//
//	return 0;
//}

//class A
//{
//
//public:
//	A()
//	{
//		_count++;
//	}
//
//	A(const A& a)
//	{
//		_count++;
//	}
//
//	static int Get_count()
//	{
//		return _count;
//	}
//
//
//private:
//	static int _count;
//
//};
//
//int A::_count = 0;
//
//void func(A a)
//{
//	//...
//}
//
//int main()
//{
//
//	A a;
//	A b(a);
//	func(a);
//
//	cout << A::Get_count() << endl;
//
//	cout << A().Get_count() - 1 << endl;
//	return 0;
//}

//class A
//{
//public:
//	A()
//		:_a(1)
//		, _b(2)
//	{
//		count++;
//	}
//
//	void print()
//	{
//		cout << _a << " " << _b << endl;
//	}
//
//private:
//	int _a;
//	int _b;
//	int count;
//
//};
//
//class Date
//{
//
//	friend ostream& operator<<(ostream& out, const Date& d);
//	friend ostream& operator>>(ostream& in, const Date& d);
//
//public :
//
//	//此处会先去调用自定义类型A的默认构造函数(在初始化列表中)
//	Date(int year = 2023, int month = 11, int day = 1)
//		:_b(1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//
//	void print()
//	{
//		cout << _year << "-" << _month << "_" << _day << endl;
//	}
//
//private:
//	int _year;
//	int _month;
//	int _day;
//
//	A _a;
//	const int _b;
//};
//
//ostream& operator<<(ostream& out, const Date& d)
//{
//	out << d._year << "-" << d._month << "_" << d._day << endl;
//	return out;
//}
//
//ostream& operator>>(ostream& in, const Date& d)
//{
//	in >> d._year >> d._month >> d._day;
//
//	return in;
//}
//
//int main()
//{
//
//	Date a;
//	a.print();
//
//	cout << a;
//
//	return 0;
//}

//class Date
//{
//
//public:
//	Date(int year,int month,int day)
//		:_year(year)
//		,_month(month)
//		,_day(day)
//	{
//		cout << "Date()" << endl;
//	}
//	
//private:
//	int _year;
//	int _month;
//	int _day;
//
//};
//
//int main()
//{
//
//	const Date& a = { 2023,11,2 };
//
//	return 0;
//}

​